﻿using System.Collections.Generic;
using System.Collections.ObjectModel;
using Commands;
using ImageConverter.Model;
using ImageConverter.Model.Enums;
using ImageConverter.Utils.Bitmap;

namespace ImageConverter.ViewModels
{
    public interface IRecodeViewModel
    {
        ObservableCollection<ContainerItem> Containers { get; }
        ContainerItem SelectedContainer { get; set; }

        IEnumerable<ContainerFilterEnum> ContainerFiltersList { get; }
        ContainerFilterEnum SelectedFilter { get; set; }

        string OutputDir { get; }

        double MinProgressValue { get; }
        double MaxProgressValue { get; }
        double CurrentProgressValue { get; set; }
        double TotalProgressValue { get; set; }
        double CurrentProgressDelta { get; }
        double TotalProgressDelta { get; }

        int CurrentEntryIndex { get; }
        int TotalEntriesInContainer { get; }
        int CurrentContainerIndex { get; }
        int TotalContainers { get; }

        bool? IsCanceled { get; }
        bool IsPaused { get; }
        bool IsCompleted { get; }

        void BeginRecode(IEnumerable<ContainerItem> containers, IEntryContainerFactory containerFactory, int baseLegth, string outputDir, bool compressOutput);

        DelegateCommand<object> PauseRecodeCommand { get; }
        DelegateCommand<object> CancelRecodeCommand { get; }
        DelegateCommand<object> ResumeRecodeCommand { get; }
        DelegateCommand<object> MinimizeRecodeViewCommand { get; }
    }
}
